﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema
  attributeFormDefault="unqualified"
  elementFormDefault="qualified"
  targetNamespace="http://kyoh.net/ns/Renamer/2012"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:rn="http://kyoh.net/ns/Renamer/2012">

  <xs:element name="batch">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="rn:source" />
        <xs:element ref="rn:rename" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:attribute name="version">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:pattern value="\d+\.\d+" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="source">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="rn:path" />
        <xs:element ref="rn:depth" />
        <xs:element ref="rn:directory" />
        <xs:element ref="rn:file" />
        <xs:element ref="rn:filter" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="rename">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="rn:pattern" />
        <xs:element ref="rn:number" />
        <xs:element ref="rn:except" minOccurs="0" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="number">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="rn:style" />
        <xs:element ref="rn:start" />
        <xs:element ref="rn:step" />
        <xs:element ref="rn:grouped" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="filter">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="rn:search" />
        <xs:element ref="rn:ignoreCase" minOccurs="1" />
      </xs:sequence>
      <xs:attribute name="method" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="Wildcard" />
            <!-- xs:enumeration value="Regex" />
            <xs:enumeration value="Characteristic" / -->
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="pattern">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="rn:search" />
        <xs:element ref="rn:replace" />
        <xs:element ref="rn:ignoreCase" minOccurs="0" />
      </xs:sequence>
      <xs:attribute name="method" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="Wildcard" />
            <xs:enumeration value="Regex" />
            <xs:enumeration value="Characteristic" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="path" type="xs:string" />
  <xs:element name="directory" type="xs:boolean" />
  <xs:element name="file" type="xs:boolean" />
  <xs:element name="depth" type="xs:int" />
  <xs:element name="grouped" type="xs:boolean" />
  <xs:element name="start" type="xs:int" />
  <xs:element name="step" type="xs:int" />
  <xs:element name="style" >
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="Decimal" />
        <xs:enumeration value="Hexadecimal" />
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="search" type="xs:string" />
  <xs:element name="ignoreCase" type="rn:BooleanType" />
  <xs:element name="replace" type="xs:string" />
  <xs:element name="except" type="rn:BooleanType" />
  <xs:simpleType name="BooleanType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="True"/>
      <xs:enumeration value="False"/>
    </xs:restriction>
  </xs:simpleType>

</xs:schema>